Objective-c 面向对象设计
##定义类
- oc的类的定义具有两个部分:接口部分(interface section)和实现部分(implementation section)
接口部分
@interface classname : superclassname(NSObject:几乎所有的oc类都是NSObject的直接或者间接子类){ instance variable declarations //类的实例变量声明 } method declarations //方法声明 方法如下: //- (return type) method_name:(argument_type) argument @end
前导连接字符(-)指示这些是实例方法。连字符后面接着将由方法返回的值的类型,并用圆括号括住它。还有可能定义被类本身执行的类的方法。类方法以加号(+)开头实现部分
@implementation classname -(return type) 方法名{ 实现方法的代码} @end
调用方法
消息表达式的形式:[receiver message]
receiver是想要用于执行方法的对象,它称为接收者,因为它将接受消息。message是执行方法的名称,以及提供给该方法的参数。ex:使用Accumulator类的一个实例作为示列,下面一行代码将把137加到anAccumulator的总和上:[anAccumulator addToTotal: 137];
下面一行代码将获取anAccumulator的总和的当前值,并把他存储在一个名为currentTotal的变量中:int currentTotal = [anAccumulator total];
- 类对象和对象创建 初始化实例的语法
classname *变量 = [[classname alloc] init];
1、将把alloc消息发送给用于classname类的类对象
2、alloc类方法为classname对象分配内存,并返回一个指向未初始化的对象的指针
3、未初始化的classname 对象变成init消息的接收者。init是classname从NSObject继承的一个实例方法
4、init返回一个指针,它指向现在初始化的Accumulator对象,然后将把它赋予变量
内存管理
retain 和 release方法分别用于递增和递减对象的保留记数:[anObject retain]; //Increments anObject's retain count [anObject release]; //Decrements anObject's retain count
在创建对象时,其保留记数为1。如果利用其名称以“alloc”、“new”、”copy”或“mutableCopy”开头的方法创建一个对象。当用完该对象后,必须通过给他发送一条release信息来抵消它的创建oc补充
- 编译器指令 以字符“@”开头的单词是编译器指令,而不是可执行代码。@interface标记类定义的借口部分开始,@implementation标记实现部分的开始,而@end则用于标记这些部分的结尾
- oc的关键字
1、id
id是一种保存“指向对象的指针”的类型
2、nil
nil是一个定义的常量,代表“不指向对象的指针”。虽然nil被定义为0,但无论何时需要一个不指向任何内容的对象指针时,一般都使用它代替单纯的0。
3、SET
SET是一种保存oc方法名的表示的类型。SET是selector(选择器)的简写。方法名有时称为选择器,因为运行库使用它们选择要执行的代码块来响应消息。
4、IMP
IMP是“指向函数的指针的typedef,该函数接受id,SET参数,可能还有其他一些参数,并且返回id”
- 框架
oc与许多动态链接库(框架)密切合作。AppKit框架在OS X上提供了用于窗口、视图、控件及其他用户界面类;UIKit框架则为iOS提供了这些项目。Foundation和AppKit的结合被称为Cocoa;Foundation和UIKit的结合则称为Cocoa Touch
- 框架数值类型
框架数值类型:NSInteger替换了框架中出现的大多数int;NSUInteger是NSInteger的无符号版本;CGFloat用于代替float;NSLog是一个由Foundation框架定义的用于自负输出的函数。NSLog类似于printf,但还是有以下区别:1、NSLog把输出写到控制台日志以及终端窗口。2、NSLog的格式字符串是字面量NSString,而不是C语言的字面量字符串。3、在打印后,NSLog将自动推进到下一行。无需在格式字符串的末尾添加“\n”。4、NSLog使用一个额外的转换说明符“%@”,它接受一个Objective-C对象作为他的参数。